Redundant Array of Inexpensive Disk (“RAID”) arrays are extensively used in the storage industry to improve the performance and reliability of mass storage installations. Commonly used RAID configurations, such as RAID 1, RAID 5, and RAID 6 achieve greater reliability by providing redundancy. This redundancy makes the disk array tolerant to failures of individual disks and speeds up data reads through the simultaneous use of multiple drives. However, these RAID configurations achieve such results at the expense of reduced write performance, since additional writes must be performed on multiple disks, either as data writes or as parity writes.
RAID arrays must also support operations such as rebuilding a degraded array on a hot-spare or replacement disk, capacity expansion by the addition of extra disks to an array, and other similar maintenance operations. These operations are typically costly on a RAID array in terms of the time it takes for completion and the performance penalty incurred while the operation is taking place. For instance, some operations, such as rebuilding a degraded array, may take hours or even days to complete. While the operation is being performed, the array in many cases is operating in a degraded mode that severely reduces performance. Because the benefit of the operation is not realized until it has fully completed, this long period of reduced performance can be frustrating for a system administrator and for users of the disk array.
RAID arrays with redundancy may also incur penalties during the start-up, or initialization, of the array. Because these arrays achieve redundancy by maintaining a particular data configuration (data is typically mirrored or protected by a parity bit), it is necessary for the array to be consistent within itself. This consistency is achieved by a long and arduous initialization phase that is performed when an array is initially brought up. During this time, there is a significant drain on the input/output (“I/O”) performance of the array as a result of the additional I/O operations needed for initialization. These additional I/O operations may also cause disk thrashing. The significant time needed for initialization and the performance penalty incurred during the initialization of a RAID array can also be frustrating for a system administrator and the users of the disk array.
It is with respect to these considerations and others that the present invention has been made.